package network_programming.np1_socket_and_serversocket;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UDPReceiveDemo {
    public static void main(String[] args) {
        UDPReceiveDemo rd = new UDPReceiveDemo();
        rd.receiveUDPData();
    }
    /*
    * 接收数据的步骤
    * 1、创建接收端的Socket对象(DatagramSocket)，指定端口
    * DatagramSocket(int port)
    *
    * 2、准备容器，封装成DatagramPacket包裹，用于接收数据
    * DatagramPacket(byte[] buf, int length)
    *
    * 3、调用DatagramSocket对象的方法，阻塞式接收数据包
    * void receive(DatagramPacket p)
    *
    * 4、解析数据包，并把数据在控制台显示
    * byte[] getData() 和 int getLength()
    *
    * 5、关闭接收端，释放资源
    * void close()
    * */
    public void receiveUDPData() {
        try(DatagramSocket dSocket = new DatagramSocket(9295)) {
            byte[] buffer = new byte[1024];     // 缓冲区，用于存接受到的数据
            DatagramPacket dPacket = new DatagramPacket(buffer, buffer.length); // 容器，即接受数据包
            while(true) {
                dSocket.receive(dPacket);   // 接收数据，会阻塞
                String data = new String(dPacket.getData(), 0, dPacket.getLength());
                if(data.equals("886"))
                    break;
                System.out.println("接收到的数据：" + data);
//                System.out.println("接收到的数据：" + new String(buffer, 0, dPacket.getLength()));

            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
